home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pine / imap_archive / text0061.txt < prev    next >
Encoding:
Text File  |  1993-07-02  |  25.7 KB  |  646 lines

  1. I am currently working on implementing the IMSP spec sent to this list earlier.
  2. Note that we are focusing on the needs of a large site with multiple IMAP
  3. servers, mobile users, and flexible administrative needs.
  4.  
  5. I'm including a document I wrote outlining the implementation plan I am using.
  6. This is a fluid document which can change as the IMSP spec is updated, and as
  7. I encounter unexpected problems.  I'm sending it so that you can get a better
  8. idea of how we're thinking and what we're doing at CMU.
  9.  
  10. Comments and suggestions are welcome.
  11.  
  12.         - Chris Newman
  13.         Carnegie Mellon University Computing Services
  14. ---------------------------------------
  15. *DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*DRAFT*
  16.  
  17.            CMU's IMSP server implementation
  18.            --------------------------------
  19.  
  20.                by Chris Newman
  21.                 draft 3/26/93
  22.  
  23. ASSUMPTIONS
  24. -----------
  25.  
  26. This document assumes you are familiar with both the IMSP and IMAP2bis
  27. protocols.
  28.  
  29. TERMS
  30. -----
  31.  
  32. CMU-IMSP
  33.     CMU's implementation of IMSP
  34.  
  35. IMAP
  36.     Interactive Mail Access Protocol (see RFC-1176, IMAP2bis documents)
  37.     A protocol for users to access mail and bboards.
  38.  
  39. IMSP
  40.     Interactive Mail Support Protocol (see IMSP document)
  41.     A protocol to manage multiple IMAP servers and provide support
  42.     functions that are related to mail access.
  43.  
  44. Update string
  45.     An implementation dependent string which uniquely specifies a
  46.     message within a folder.
  47.  
  48. USP
  49.     Un-Specified Protocol
  50.     A currently unspecified protocol or set of protocol extensions
  51.     for communication between IMAP and IMSP servers.
  52.  
  53. FILES
  54. -----
  55.  
  56. CMU-IMSP will store its configuration files in a configuration directory
  57. (usually /var/imsp).  Within this configuration directory are the
  58. following files (the .lock files are empty files used to prevent
  59. synchronization errors):
  60.  
  61. options, options.lock
  62.     Global options file.  See the "OPTIONS" section below.
  63.  
  64. bboards, bboards.lock
  65.     List of available bboards, the servers they're on and the
  66.     update string of the last message in the folder.  See
  67.     "BBOARDS" below.
  68.  
  69. changed, changed.lock
  70.     List of bboards that have been renamed or aliased.
  71.  
  72. user
  73.     Directory for user specific information.
  74.  
  75. The user subdirectory will contain another subdirectory for each user
  76. on the system.  The user specific subdirectories will contain the
  77. following:
  78.  
  79. options, options.lock
  80.     User options.  See "OPTIONS" section below.
  81.  
  82. mailboxes, mailboxes.lock
  83.     List of mailboxes the user has, a flag indicating subscription
  84.     status, an update string of the last message for which the
  85.     user has read everything previous, and the server they are on.
  86.     See "USER MAILBOX LISTS" below.
  87.  
  88. bbsubs, bbsubs.lock
  89.     List of bboards the user has accessed, a flag indicating
  90.     subscription status, and an update string.  See
  91.     "SUBSCRIPTIONS" below.
  92.  
  93. When the CMU-IMSP server becomes a replicated service, cross server
  94. locking and synchronization of these files will need to be
  95. implemented.  All file access and file locking will be heavily
  96. modularized in expectation of this replication.
  97.  
  98. OPTIONS
  99. -------
  100.  
  101. Server configuration, user configuration and some general information
  102. is made available through the options interface.  Options may be read
  103. with the IMSP "GET" command and changed with the IMSP "SET" or "UNSET"
  104. commands.  Four basic types of options are supported.  "Magic" options
  105. are built into the server and may return different values at different
  106. times (e.g. the "date" option).  "Non-visible" options may only be
  107. used by the config administrator, and are for configuration options
  108. that are of no interest to the user.  "Read-only" options may not be
  109. changed by users.  "Read-write" options may have a default (global)
  110. value, which may be overridden by the user's local options.
  111. Non-visible options appear read-only to a full administrator.  Magic
  112. options usually appear as read-only.
  113.  
  114. The options file contains a list of options in the following format:
  115.  
  116.     OPTION-NAME OPTION-TYPE OPTION-VALUE LF
  117.  
  118. The OPTION-NAME is a string containing no spaces or CRLF characters
  119. and specifies the option.  The OPTION-TYPE is a single character
  120. either 'N' (Non-visible), 'R' (Read-only) or 'W' (Read-Write).  The
  121. OPTION-VALUE field has the option value with '\n' for newlines, and
  122. '\\' for '\'.
  123.  
  124. Option names are case-insensitive, but option values may be case
  125. sensitive.
  126.  
  127. By convention: Boolean options are on if their value is '+' and off if
  128. their value is '-'.  Integer options are numeric with an optional '-'
  129. prefix.  List options begin with '(', end with ')', and the different
  130. items are separated by spaces.  If necessary, '"' could be used to
  131. quote list items containing parentheses and spaces.
  132.  
  133. The "imsp.options.quota" option specifies the maximum number of
  134. kilobytes permitted in a user options file.
  135.  
  136. Normal users may only set options in their user options file that
  137. don't shadow a global read-only option.  Full administrators
  138. may change global options using the IMSP "SET" command and prefixing
  139. the option name with a '*'.
  140.  
  141. ADMINISTRATION
  142. --------------
  143.  
  144. There will be three levels of administration provided by CMU-IMSP.
  145. The usernames in the "imsp.admin.subs" list option are allowed to view
  146. but not change other user's subscriptions and mailboxes (by issuing
  147. the LOGIN command with a null password).  This is provided to allow a
  148. subscription statistics service such as CMU's "arbitron" or a delivery
  149. system to find the location of a user's INBOX.  The
  150. "imsp.admin.bboards" level would be useful for a postmaster who
  151. administrates the entire bboard tree.  The "imsp.admin.all" level
  152. (which includes all the others) allows full access to the CMU-IMSP
  153. server and would be useful for the system administrator.
  154.  
  155. The administrator options will be lists of userids.  PTS or DFS groups
  156. may be also be supported by a compile-time option.
  157.  
  158. The following IMSP commands will be generally restricted in CMU-IMSP:
  159. MOVE, MOVE.BBOARD, ALIAS.BBOARD, RENAME.BBOARD, CREATE or
  160. CREATE.BBOARD with server_partition_list, and DELETE or DELETE.BBOARD
  161. with hostname.
  162.  
  163. If the bboard "user.<username>.INBOX" is removed, then that user will
  164. be removed from the IMSP server database.
  165.  
  166. LOGIN ACCESS
  167. ------------
  168.  
  169. Access to the server is controlled by the login command.  The initial
  170. version will allow kerberos-style logins as well as plaintext logins.
  171. If the global option "imsp.create.new.users" is not set, then a user
  172. must also have a subdirectory in the "user" directory in order to log
  173. in.  If "imsp.create.new.users" is set and the user has no INBOX, it
  174. will be created according the the "CREATE" policy below.  An
  175. administrator with appropriate access may gain access to a user's
  176. MAILBOX namespace by issuing a second LOGIN command with that user's
  177. name and a NULL password.
  178.  
  179. SERVER STRUCTURE
  180. ----------------
  181.  
  182. The CMU-IMSP server will run as a process which watches the
  183. appropriate port.  When a connection from a client is made, the server
  184. process will fork to give each client its own process.  The parent
  185. process will continue to watch for connections and will also
  186. periodically update the BBOARD LISTS (see next section).  A limit on
  187. the number of connections to service could be added if deemed necessary.
  188.  
  189. FAULT TOLERANCE
  190. ---------------
  191.  
  192. Any bad protocol or improper syntax from the user will be rejected
  193. through the protocol.  If a connection from a user is dropped, the
  194. server will make sure all files are up to date, and let the connection
  195. go.  In the case of server disk errors, the server will abort (and
  196. remove itself from the pool if replicated servers are being used) and
  197. wait for the system administrator to clean up.  User subscriptions and
  198. options should be backed up regularly for recovery purposes.  If a
  199. proxy connection to an IMAP server fails, IMSP will respond to the
  200. user request which prompted the proxy with a failure message.
  201.  
  202. CONTACTING IMAP SERVERS
  203. -----------------------
  204.  
  205. Because the MAILBOXES namespace is user specific, CMU-IMSP must be
  206. able to do proxy logins to the IMAP servers.  When a user logs into
  207. CMU-IMSP with a plaintext password, this is not a problem.  However,
  208. when a user logs into CMU-IMSP with kerberos, CMU-IMSP can't pretend
  209. to be that user to the IMAP servers.  In order to support kerberos,
  210. the IMAP server must allow the CMU-IMSP identity kerberos
  211. authenticator as a valid password for any user.  Initially the
  212. CMU-IMSP identity will be "imap.*".  When we implement our own IMAP
  213. server, it will keep a list of valid IMSP identities.
  214.  
  215. BBOARD LISTS
  216. ------------
  217.  
  218. The first time the CMU-IMSP server is started, no top level "bboards"
  219. file will exist.  At this point the server will check the
  220. "imap.servers" option and contact each IMAP server in the list to find
  221. the available bboards by doing a "FIND ALL.BBOARDS *".
  222.  
  223. The bboards file will have the following format:
  224.  
  225.     BBOARD-NAME IMAP-SERVER-LIST UPDATE-STRING LF
  226.  
  227. The BBOARD-NAME is the name of that bboard.  IMAP-SERVER-LIST is a
  228. list of hostnames where that bboard is stored.  If IMAP-SERVER-LIST is
  229. the empty list "()", then it is assumed that BBOARD-NAME is located on
  230. the same server as its parent bboard (using '.' notation).
  231. UPDATE-STRING is the update string for that bboard (optional).
  232.  
  233. BBOARD NAMESPACE
  234. ----------------
  235.  
  236. If the "imsp.share.mailboxes" option is set, then the "user.<username>."
  237. namespace is reserved as a mapping from the MAILBOX namespace to the
  238. BBOARDS namespace.  If the "imsp.external.subs" option is set, than
  239. names of the form {hostname}folder are reserved for external sites.
  240.  
  241. USER MAILBOX LISTS
  242. ------------------
  243.  
  244. Information about the location of user mailboxes are stored in that
  245. user's "mailboxes" file.  The structure of the file is as follows:
  246.  
  247.     MAILBOX-NAME SUBSCRIPTION-STATUS UPDATE-STRING [SERVER-NAME] LF
  248.  
  249. MAILBOX-NAME is the name of the mailbox.  SUBSCRIPTION-STATUS is a
  250. flag: '0' indicates user is not subscribed and '1' indicates user is
  251. subscribed.  UPDATE-STRING indicates how much the user has seen.  The
  252. optional SERVER-NAME specifies the hostname where the mailbox is
  253. located.  If it is omitted, the server is assumed to be the one
  254. specified by the "imap.default.server" option.
  255.  
  256. If user logs in and has no mailboxes file, CMU-IMSP will contact the
  257. IMAP server specified by the "imap.default.server" option, do a
  258. proxy-login and a "FIND MAILBOXES *".
  259.  
  260. The "SUBSCRIBE MAILBOX" and "UNSUBSCRIBE MAILBOX" IMSP commands are
  261. used to modify the SUBSCRIPTION-STATUS field.
  262.  
  263. If the option "imsp.external.subs" is set, then a user may subscribe
  264. to any mailbox name with the '{' prefix.  The subscription will be
  265. returned by the FIND MAILBOXES or FIND UNSEEN.MAILBOXES with an empty
  266. list of server locations.  This is only appropriate for sites whose
  267. clients all recognize the {hostname}mailbox notation.
  268.  
  269. SUBSCRIPTIONS
  270. -------------
  271.  
  272. Information about subscriptions to mailboxes are stored in the
  273. mailboxes file (see the USER MAILBOX LISTS above).  Information about
  274. subscriptions to bboards are stored in the user's "bbsubs" file with the
  275. following format:
  276.  
  277.     BBOARD-NAME SUBSCRIPTION-STATUS UPDATE-STRING LF
  278.  
  279. BBOARD-NAME is the name of the bboard.  SUBSCRIPTION-STATUS is a flag:
  280. '0' indicates user is not subscripted and '1' indicates user is
  281. subscribed.  UPDATE-STRING indicates how much the user has seen.
  282. Subscriptions may be adjusted with the IMSP "SUBSCRIBE" and
  283. "UNSUBSCRIBE" commands.  A user is not permitted to unsubscribe to a
  284. bboard listed in the "imsp.required.bbsubs" option.
  285.  
  286. If a user has no bbsubs file, a new one will be created with a
  287. subscription to each bboard listed in the "imsp.default.bbsubs"
  288. option.
  289.  
  290. If the option "imsp.external.subs" is set, then a user may subscribe
  291. to any bboard name with the '{' prefix.  The subscription will be
  292. returned by the FIND BBOARDS or FIND UNSEEN.BBOARDS with an empty list
  293. of server locations.  This is only appropriate for sites whose clients
  294. all recognize the {hostname}bboard notation.
  295.  
  296. If a user tries to subscribe to a name of the form "user.<username>.*"
  297. and the "imsp.share.mailboxes" option is set, then the ACL for that
  298. folder (if existent) will be checked to see if the user has lookup
  299. access, and the subscription will be permitted if the user does.
  300. Error messages should not allow the current user to find out what
  301. folders <username> may or may not have.
  302.  
  303. The mailboxes and bbsubs files will be kept in alphabetic order.  By
  304. default, the FIND commands will return results in this order.  A user
  305. may adjust the order returned by the "FIND BBOARDS *" and "FIND
  306. UNSEEN.BBOARDS *" commands by setting their "bboard.order" option.
  307. This option is a list of patterns (as would be used with the FIND
  308. command).  For each pattern, all subscriptions that match that pattern
  309. (and have not yet been sent) will be sent in alphabetic order.  Any
  310. subscriptions not matched by any pattern will be sent afterwards.  The
  311. "mailbox.order" option functions the same, but it adjusts the
  312. responses to the "FIND MAILBOXES *" and "FIND UNSEEN.MAILBOXES *"
  313. commands.
  314.  
  315. FIND UNSEEN
  316. -----------
  317.  
  318. The "FIND UNSEEN.*" commands will be implemented as follows: all new
  319. subscriptions will default to an unseen state, so by default "FIND
  320. UNSEEN.BBOARDS/UNSEEN.MAILBOXES" will be the same as "FIND
  321. BBOARDS/MAILBOXES".  The "LAST" and "SEEN" IMSP extension commands
  322. will be used to change seen/unseen information as follows:
  323.  
  324.     tag LAST MAILBOX mailbox update-string userid
  325.     tag LAST BBOARD bboard update-string
  326.  
  327. These commands will be sent from an IMAP server to CMU-IMSP periodically to
  328. indicate the mailboxes and bboards with new messages.
  329.  
  330.     tag SEEN MAILBOX mailbox update-string userid
  331.     tag SEEN BBOARD bboard update-string userid
  332.  
  333. These commands will be sent from an IMAP server to CMU-IMSP only when a
  334. user finishes reading all messages on the specified mailbox or bboard.
  335.  
  336. For bboards, a "LAST" will specify the update string to be placed the
  337. the bboards file for a given bboard, and a "SEEN" will specify the
  338. update string to be placed in the bbsubs file for a given user and
  339. bboard.  For mailboxes, a "LAST" will specify that a NULL should be
  340. placed in the update string for that mailbox, and a "SEEN" will
  341. specify that that value should be placed in the update string.  It is
  342. expected that the IMAP servers will be the only users allowed to use
  343. the "SEEN" and "LAST" commands.  The "FIND UNSEEN.BBOARDS" command
  344. will list all bboards where the bbsubs update string differs from the
  345. bboards update string (or where the strings are NULL).  The "FIND
  346. UNSEEN.MAILBOXES" will list all mailboxes with a NULL update string.
  347.  
  348. IMSP SERVER REPLICATION
  349. -----------------------
  350.  
  351. A single IMSP server will probably be insufficient for a medium to
  352. large site.  Therefore consideration must be taken on how to replicate
  353. the CMU-IMSP database between cooperating CMU-IMSP servers.  An
  354. inter-IMSP server locking and data transfer protocol will need to be
  355. found.  One possibility is to use the ubik protocol from Transarc.
  356. This would, however, prevent us from being able to distribute a
  357. replicated IMSP implementation outside of CMU.  Load balancing between
  358. IMSP servers should be provided by DNS.  For the first implementation
  359. (which won't include IMSP server replication), care will be taken to
  360. keep all access to potentially shared data highly modularized.
  361.  
  362. BBOARD REPLICATION
  363. ------------------
  364.  
  365. IMSP supports replication of mailboxes and bboards on multiple
  366. servers.  CMU-IMSP will only support replication of bboards.  To do
  367. this, CMU-IMSP will have to designate a master site for a bboard and
  368. manage replication through the USP.  The master site will be the first
  369. bboard listed in the server list.  In addition, the USP may support a
  370. server-load indicator so that CMU-IMSP can sort the output of the list
  371. of servers for FIND command by a load parameter.  Alternatively, the
  372. CMU-IMSP server could simply randomize the list. The FIND command
  373. will return unsorted server lists to any administrator (so that the
  374. administrator can determine the master site).
  375.  
  376. If a "CREATE.BBOARD" or "MOVE.BBOARD" command with replication sites
  377. is specified and the bboard already exists on some of the replication
  378. sites, they will simply be added to the list and no error will be generated.
  379.  
  380. MOVE
  381. ----
  382.  
  383. The IMSP "MOVE" and "MOVE.BBOARD" are used to move folders between
  384. IMAP servers.  This requires a command in USP (or IMAP) to direct an
  385. IMAP server to send a folder to another IMAP server.
  386.  
  387. CREATE
  388. ------
  389.  
  390. The IMSP "CREATE" and "CREATE.BBOARD" commands are used to create new
  391. mailboxes and bboards.  Both commands adjust the mailboxes and bboards
  392. files as appropriate.  If no hostname is specified on the "CREATE"
  393. command, the hostname will be selected as follows:
  394.     1) If the user has an INBOX, the server the INBOX is on.
  395.     2) If the user has a "imap.default.server" option set, that
  396.        server is used.
  397.     3) If the USP has a "request server free space" option, then the
  398.        server with the most free space in the "imap.new.mailbox.servers"
  399.        list will be used.
  400.     4) Otherwise a random server from the "imap.new.mailbox.servers" list
  401.        will be selected.
  402. "CREATE" will be implemented by proxy to an IMAP server.
  403. If no hostname is specified on the "CREATE.BBOARD" command, then the
  404. policy used to select a location for the bboard is specified by the
  405. "imsp.create.policy" option.  Policy types to be implemented in
  406. CMU-IMSP include the following: "random" selects a random server from
  407. the "imap.new.bboard.servers" list.  "parent" selects the server that
  408. the "parent" bboard is located on, if no parent bboard is found, it
  409. falls back to another policy.  "free-space" selects the server with
  410. the most available free space.  This can only be implemented if a free
  411. space request is available through USP.  The "CREATE.BBOARD" command
  412. requires USP.
  413.  
  414. CHANGED SUBSCRIPTIONS
  415. ---------------------
  416.  
  417. The "changed" file allows a lazy evaluation method of updating user
  418. bbsubs files.  When a user is subscribed to a non-existent bboard, the
  419. "changed" file will be checked for an entry for that bboard.  The
  420. changed file contains lines of the form:
  421.     OLD-BBOARD NEW-BBOARD TIMESTAMP LF
  422. OLD-BBOARD is the name of a non-existent bboard and NEW-BBOARD is the
  423. name of the new bboard which has replaced OLD-BBOARD.  The TIMESTAMP
  424. is provided as a mechanism to expire changed entries to prevent the
  425. file from growing without bound.  If the TIMESTAMP has a value of 0,
  426. then the entry represents a permanent alias.
  427. If a bboard is renamed more than once, the previous entries in the
  428. "changed" file will be updated to prevent chaining.
  429. "user.<username>.*" bboards will only be entered into this file if the
  430. "RENAME.BBOARD" command is used on them.  Otherwise users are expected
  431. to keep track of shared mailboxes that have been renamed.
  432.  
  433. RENAME
  434. ------
  435.  
  436. If a user mailbox is renamed with the IMSP "RENAME" command, the
  437. mailboxes file should be adjusted as appropriate.  The IMSP
  438. "RENAME.BBOARD" command will adjust the bboards file and add a line to
  439. "changed" file.  This allows modification of individual user's bbsubs
  440. file to be done in a lazy-evaluation style and also allows CMU-IMSP to
  441. alert the user (through an unsolicited OK) that the bboard has been
  442. renamed.  The "RENAME" command will be implemented by proxy to the
  443. appropriate IMAP server.  The "RENAME.BBOARD" command will require USP
  444. or an IMAP extension.
  445.  
  446. DELETE
  447. ------
  448.  
  449. The IMSP "DELETE" and "DELETE.BBOARD" commands will adjust the bboards
  450. or mailboxes file as appropriate (no change is necessary for deleting
  451. a replication site).  When a user has a subscription entry that refers
  452. to a non-existent bboard (that doesn't have an entry in the changed
  453. file) they will be informed that the bboard was deleted and the
  454. subscription entry will be removed.  The "DELETE" command will be
  455. implemented by proxy to the appropriate IMAP server.  The
  456. "DELETE.BBOARD" command will require USP or an IMAP extension.
  457.  
  458. ACLS
  459. ----
  460.  
  461. The IMSP "SETACL", "DELETEACL", "GETACL" and "MYACL" commands only
  462. require location of the bboard on the part of the CMU-IMSP server.
  463. The rest is dependent upon implementing ACL support in either IMAP or
  464. USP.  CMU-IMSP will assume that the lookup access right is always set
  465. for all bboards.
  466.  
  467. LOGGING
  468. -------
  469.  
  470. CMU-IMSP will support multiple levels of logging using the standard
  471. UNIX syslog mechanism.  Logging will be modular so that an alternate
  472. mechanism could be used if syslog is deemed too primitive.  The
  473. "imsp.log.level" option will specify the logging level (each level
  474. includes the previous levels) as follows:
  475.  
  476. 0 - only fatal errors will be sent to syslog as LOG_ERROR.
  477.  
  478. 1 - warnings will be sent to syslog as LOG_WARNING.
  479.  
  480. 2 - bboard administrative actions (including new bboard creations)
  481. will be sent to syslog as a LOG_NOTICE.  The message will include the
  482. user, hostname, type and time of the action.
  483.  
  484. 3 - every time a user logs in or out, a syslog LOG_NOTICE message will
  485. be sent.
  486.  
  487. 9 - debugging messages will be sent to syslog as LOG_DEBUG.
  488.  
  489. MONITORING
  490. ----------
  491.  
  492. The initial implementation will keep in mind that we will want to
  493. monitor serious IMSP errors and possibly the number of active
  494. connections to a given server.  These might be made available through
  495. SNMPcon or a similar mechanism.
  496.  
  497. USP FEATURES
  498. ------------
  499.  
  500. A directed move/copy function is necessary to implement the IMSP
  501. "MOVE"/"MOVE.BBOARD" command and replication.  The CMU-IMSP server
  502. must be able to request available free space on a server in order to
  503. implement load-balanced creation policies.  ACL support should be
  504. added to USP (or IMAP) in order to allow implementation of the IMSP
  505. ACL commands.  A way of finding a system load parameter on IMAP
  506. servers should be added to support load-balanced bboard replication.
  507. Support would also be needed in order to implement the partition based
  508. CREATE feature.  Also extensions to IMAP or USP commands would be
  509. needed to implement the CREATE.BBOARD, DELETE.BBOARD, RENAME.BBOARD,
  510. and ALIAS.BBOARD.
  511.  
  512. INTERFACE TO DELIVERY SYSTEM
  513. ----------------------------
  514.  
  515. The delivery system is expected to use CMU-IMSP to locate the
  516. appropriate IMAP server to deliver a message.  It must have
  517. "imsp.admin.subs" level access to locate the INBOX for any user.
  518.  
  519. PREDEFINED OPTIONS
  520. ------------------
  521.  
  522. The following option names are reserved in this implementation.
  523.  
  524. bboard.listorder    [READ-WRITE]
  525.     This is a list of patterns used to order the results of a
  526.     "FIND BBOARDS *" or "FIND UNSEEN.BBOARDS *" command.
  527.  
  528. bcc.mailbox        [READ-WRITE]
  529.     The name of a mailbox to APPEND blind carbon copies.
  530.  
  531. date            [READ-ONLY] (magic)
  532.     When a user asks for the value of the date option, an RFC-822
  533.     date string should be returned with the current time.  This is
  534.     provided to assist small clients with unreliable clocks.
  535.  
  536. delivery.hosts        [READ-ONLY]
  537.     This contains the list of recommended SMTP hosts for mail delivery.
  538.  
  539. domain            [READ-ONLY]
  540.     When a user asks for the domain option, the local mail domain
  541.     is returned.
  542.  
  543. from            [READ-ONLY] (magic)
  544.     When a user asks for the value of the from option, an RFC-822
  545.     address for that user is returned.
  546.  
  547. imap.default.server    [READ-ONLY]
  548.     This specifies the default imap server for a user.
  549.  
  550. imap.new.bboard.servers    [NON-VISIBLE]
  551.     This specifies a list of imap servers where new bboards may be
  552.     created.
  553.  
  554. imap.new.mailbox.servers [NON-VISIBLE]
  555.     This specifies a list of imap servers where an INBOX may be
  556.     created for a new user.
  557.  
  558. imap.servers        [READ-ONLY]
  559.     This global option contains a list of all IMAP servers managed
  560.     by IMSP.
  561.  
  562. imsp.admin.all        [NON-VISIBLE]
  563.     This is a list of users that may use any implemented IMSP features.
  564.  
  565. imsp.admin.bboards    [NON-VISIBLE]
  566.     This is a list of users that may create, rename, delete and
  567.     alias any bboards.
  568.  
  569. imsp.admin.subs        [NON-VISIBLE]
  570.     This is a list of users allowed to view (but not change) other
  571.     user's subscriptions and mailboxes.
  572.  
  573. imsp.create.new.users    [NON-VISIBLE]
  574.     If this global option is on, the directory for a new user
  575.     will be created automatically.  Otherwise the system
  576.     administrator must create a directory for each authorized user.
  577.  
  578. imsp.create.policy    [NON-VISIBLE]
  579.     This is specifies the creation policy for new bboards.  The
  580.     option is specified as a site-defined string.
  581.  
  582. imsp.default.bbsubs    [NON-VISIBLE]
  583.     A list of the default bboard subscriptions given to a new user.
  584.  
  585. imsp.external.subs    [NON-VISIBLE]
  586.     If this is set, subscriptions to external mailboxes and
  587.     bboards are allowed by using the {hostname}folder notation.
  588.  
  589. imsp.log.level        [NON-VISIBLE]
  590.     This integer specifies the amount of logging to be done.
  591.  
  592. imsp.options.quota    [NON-VISIBLE]
  593.     This is an integer specifying the maximum number of kilobytes
  594.     in an options file.
  595.  
  596. imsp.required.bbsubs    [NON-VISIBLE]
  597.     Users will not be allowed to unsubscribe to bboards in this
  598.     list.
  599.  
  600. imsp.share.mailboxes    [NON-VISIBLE]
  601.     If this global option is on, then bboard names beginning with
  602.     the prefix "user.<username>." are reserved as mappings of
  603.     individual user's MAILBOXES into the BBOARDS namespace.  In
  604.     addition, it permits users to allow other users to read their
  605.     mailboxes if ACLs permit.
  606.  
  607. mailbox.listorder    [READ-WRITE]
  608.     This is a list of patterns used to order the results of a
  609.     "FIND MAILBOXES *" or a "FIND UNSEEN.MAILBOXES *" command.
  610.  
  611. PROJECT PLAN
  612. ------------
  613. Phase 1 - Basic Implementation
  614. The goal of phase 1 will be to produce an IMSP server with all basic
  615. functionality that works with a stock IMAP client.  Only features
  616. which can be implemented without the USP will be done.  This includes
  617. the following:
  618. Options: including GET, SET, and UNSET.
  619. FIND *  (although the "SEEN" and "LAST" commands won't be implemented)
  620. Administrative levels with LOGIN
  621. SUBSCRIBE, UNSUBSCRIBE
  622. CREATE/RENAME/DELETE without replication or free-space create policy.
  623.  
  624. Phase 2 - Unseen Information
  625. This will involve implementing the "SEEN" and "LAST" commands as well
  626. as modifying an IMAP server to use them.
  627.  
  628. Phase 3 - Advanced features
  629. This will involve implementing the USP, "MOVE", "MOVE.BBOARD",
  630. create/rename/delete/alias for bboards, ACLs, and free-space create
  631. policy.  It will probably be necessary to write our own IMAP
  632. implementation in order to make the IMAP and IMSP servers work
  633. together smoothly with these features.
  634.  
  635. Phase 4 - Replicated IMSP
  636. This might be done before phase 3, as it has no dependencies on IMAP
  637. modifications.  This involves adding inter-IMSP server
  638. synchronization.
  639.  
  640. Phase 5 - Replicated bboards
  641. This could be done before phase 4 but depends on phase 3.  Add
  642. replication support for bboards as well as load-balanced server lists
  643. returned by the FIND command.
  644.  
  645.  
  646.